/**
 * @author Silas Fontain, Søren Lorentzen, Daniel Nissen
 */

package ordination;

import static org.junit.Assert.*;

import java.util.GregorianCalendar;

import org.junit.Before;
import org.junit.Test;

public class PNTest {
	
	private PN pntest;
	private GregorianCalendar startDato;
	private GregorianCalendar slutDato;
	private Laegemiddel lm;

	@Before
	public void setUp() throws Exception {
		lm = new Laegemiddel("Pinex", 0.1,0.15,0.16, "Styk");
	}
	
	/**
	 * opretter et sæt data
	 */
	private void addData1() {
		startDato = new GregorianCalendar(1999, 02, 10);
		slutDato = new GregorianCalendar(1999, 02, 20);
		pntest = new PN(startDato, slutDato, lm, 3);
		pntest.dosisGivet(new GregorianCalendar(1999, 02, 12));
		pntest.dosisGivet(new GregorianCalendar(1999, 02, 15));
		pntest.dosisGivet(new GregorianCalendar(1999, 02, 16));
		pntest.dosisGivet(new GregorianCalendar(1999, 02, 14));
	}
	
	/**
	 * opretter et sæt data
	 */
	private void addData2() {
		startDato = new GregorianCalendar(2005, 11, 24);
		startDato = new GregorianCalendar(2006, 00, 05);
		pntest = new PN(startDato, slutDato, lm, 5);
		pntest.dosisGivet(new GregorianCalendar(2005, 11, 29));
		pntest.dosisGivet(new GregorianCalendar(2005, 11, 31));
		pntest.dosisGivet(new GregorianCalendar(2006, 00, 02));
	}

	@Test
	public void testSamletDosis() {
		addData1();
		assertEquals(12, pntest.samletDosis(), 0.1);
		
		// Forsøger at nulstille testdata så metoden kan gennemføre flere tests
		try {
			setUp();
		} catch (Exception e) {
			fail("setup failed");
		}
		
		addData2();
		assertEquals(15, pntest.samletDosis(), 0.1);
	}

	@Test
	public void testDoegnDosis() {
		addData1();
		assertEquals(2.4, pntest.doegnDosis(), 0.01);
		
		// Forsøger at nulstille testdata så metoden kan gennemføre flere tests
		try {
			setUp();
		} catch (Exception e) {
			fail("setup failed");
		}
		
		addData2();
		assertEquals(3, pntest.doegnDosis(), 0.01);
	}

	@Test
	public void testPN() {
		startDato = new GregorianCalendar(2011, 00, 03);
		slutDato = new GregorianCalendar(2011, 00, 16);
		pntest = new PN(startDato, slutDato, lm, 3);
		
		// Tester at ordinationen er oprettet med korrekt antal dage
		assertEquals(14, pntest.antalDage());
		
		// Tester at linket til Laegemiddel er etableret
		assertEquals(lm, pntest.getLaegemiddel());
		
		// Tester at antal enheder der skal gives ud er korrekt oprettet
		assertEquals(3, pntest.getAntalEnheder(), 0.01);
	}

}
